<?
	class DictionaryController extends RepositoryController
	{		
		protected $entity = 'DictionaryObject';
		
		public function remove($id, $code)
		{
			$dic = new Dictionary($code);
			$dic->drop();
			
			return parent::remove($id);
		}
		
		public function load($id)
		{			
			$rep = $this->repo();
			$data = $rep->get($id);
			$dic = new Dictionary($data['code']);
		
			return array(
				'success' => true,
				'data' => $data,
				'meta' => $dic->getMeta()
			);
		}
		
		public function read($node)
		{
			if($node == 'root')
			{
				$data = array(
					array(
						'id' => 'system',
						'name' => 'Системные справочники',
						'type' => 'group',
						'leaf' => false
					),
					array(
						'id' => 'user',
						'name' => 'Пользовательские',
						'type' => 'group',
						'leaf' => false
					)
				);
			} else {
				$rep = $this->repo();
				$query = $rep->newQuery();
				$where = array('eq' => array('type', $node));
				
				$data = $query->where($where)->results();
			}
			
			return array(
				'succes' => true,
				'data' => $data	
			); 
		}
		
		public function update($id, $code, $data, $meta)
		{
			if($this->checkData($data, $id))
			{			
				$dic = new Dictionary($code);
				$dic->rename($data->code);
				$dic->updateFields($meta);
				
				parent::update($id, $data);
			
				return array(
					'success' => true,
					'data' => $this->repo()->get($id),
					'meta' => $dic->getMeta()
				);
			}				
				
			return array(
				'succes' => false, 
				'data' => 'Справочник с кодом "' . $data->code . '" уже существует.</br>Придумайте другой код.'
			);
		}
		
		public function create($data, $meta)
		{
			if($this->checkData($data))
			{
				$data->type = 'user';
				$dic = new Dictionary($data->code);
				$dic->create($meta);
				
				$result = parent::create($data);
				$result['meta'] = $dic->getMeta();
				
				return $result;
			}				
				
			return array(
				'succes' => false, 
				'data' => 'Справочник с кодом "' . $data->code . '" уже существует.</br>Придумайте другой код.'
			);
		}
		
		private function checkData($row, $id = null)
		{
			if(isset($row->code))
			{
				$query = $this->repo()->newQuery();
				$query->where(
					array(
						'eq' => array('code', $row->code),
						'not' => array('id', $id)
					)
				);
				
				$count = $query->count();
				
				return ($count == 0);
			}
			
			return true;
		}
	}
?>